package com.coincalf.entity;

import com.baomidou.mybatisplus.activerecord.Model;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 * 委托订单信息
 * </p>
 *
 * @author qiang
 * @since 2018-05-12
 */
@Data
@Accessors(chain = true)
@TableName("entrust_order")
public class EntrustOrder extends Model<EntrustOrder> {

    private static final long serialVersionUID = 1L;

    /**
     * 订单ID
     */
    @TableId(value = "id", type = IdType.ID_WORKER)
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /**
     * 用户ID
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 市场ID
     */
    @TableField("market_id")
    private Long marketId;

    /**
     * 市场类型（1：币币交易，2：创新交易）
     */
    @TableField("market_type")
    private Integer marketType;

    /**
     * 市场标识符
     */
    @TableField("symbol")
    private String symbol;

    /**
     * 交易市场
     */
    @TableField("market_name")
    private String marketName;

    /**
     * 委托价格
     */
    @TableField("price")
    private BigDecimal price;

    /**
     * 合并深度价格1
     */
    @TableField("merge_low_price")
    private BigDecimal mergeLowPrice;

    /**
     * 合并深度价格2
     */
    @TableField("merge_high_price")
    private BigDecimal mergeHighPrice;

    /**
     * 委托数量
     */
    private BigDecimal volume;

    /**
     * 委托总额
     */
    private BigDecimal amount;

    /**
     * 手续费比率
     */
    @TableField("fee_rate")
    private BigDecimal feeRate;

    /**
     * 交易手续费
     */
    private BigDecimal fee;

    /**
     * 合约单位
     */
    @TableField("contract_unit")
    private Integer contractUnit;

    /**
     * 已成交数量
     */
    private BigDecimal deal;

    /**
     * 冻结量
     */
    private BigDecimal freeze;

    /**
     * 保证金比例
     */
    @TableField("margin_rate")
    private BigDecimal marginRate;

    /**
     * 基础货币对（USDT/BTC）兑换率
     */
    @TableField("base_coin_rate")
    private BigDecimal baseCoinRate;

    /**
     * 报价货币对（USDT/BTC）兑换率
     */
    @TableField("price_coin_rate")
    private BigDecimal priceCoinRate;

    /**
     * 占用保证金
     */
    @TableField("lock_margin")
    private BigDecimal lockMargin;

    /**
     * 价格类型：
     * 1-市价
     * 2-限价
     */
    @TableField("price_type")
    private Integer priceType;

    /**
     * 交易类型：
     * 1-开仓
     * 2-平仓
     */
    @TableField("trade_type")
    private Integer tradeType;

    /**
     * 买卖类型：
     * 1-买入，例如买入BTC，扣除USDT
     * 2-卖出，例如卖出BTC，获取USDT
     */
    private Integer type;

    /**
     * 平仓订单号
     */
    @TableField("open_order_id")
    private Long openOrderId;

    /**
     * status订单状态
     * 0：委托中
     * 1：已成交
     * 2：已撤销
     */
    private Integer status;

    /**
     * 更新时间
     */
    @TableField("last_update_time")
    private Date lastUpdateTime;

    /**
     * 创建时间
     */
    private Date created;

    @Override
    protected Serializable pkVal() {
        return this.id;
    }
}
